#define  _CRT_SECURE_NO_WARNINGS  1

#include <iostream>
using namespace std;

//class A
//{
//public:
//	A(int a = 0)
//		:_a(a)
//	{
//		cout << "A(int a)" << endl;
//	}
//	~A()
//	{
//		cout << "~A()" << endl;
//	}
//private:
//	int _a;
//};
//
//class B
//{
//public:
//	B(int b = 0)
//		:_b(b)
//	{
//		cout << "B(int b)" << endl;
//	}
//	~B()
//	{
//		cout << "~B()" << endl;
//	}
//private:
//	int _b;
//};
//
//class C
//{
//public:
//	C(int c = 0)
//		:_c(c)
//	{
//		cout << "C(int c)" << endl;
//	}
//	~C()
//	{
//		cout << "~C()" << endl;
//	}
//private:
//	int _c;
//};
//
//class D
//{
//public:
//	D(int d = 0)
//		:_d(d)
//	{
//		cout << "D(int d)" << endl;
//	}
//	~D()
//	{
//		cout << "~D()" << endl;
//	}
//private:
//	int _d;
//};
//
//C c;
//int main()
//{
//	A  a;
//	B  b;
//	static D d;
//	return 0;
//}


class A
{
public:
	A(int a = 0)
		:_a1(a)
	{
		cout << "A(int a)" << endl;
	}

	A(const A& aa)
		:_a1(aa._a1)
	{
		cout << "A(const A& aa)" << endl;
	}

	A& operator=(const A& aa)
	{
		cout << "A& operator=(const A& aa)" << endl;

		if (this != &aa)
		{
			_a1 = aa._a1;
		}
		return *this;
	}

	~A()
	{
		cout << "~A()" << endl;
	}

private:
	int _a1 = 1;
};

A f2()
{
	A aa;
	return aa;
}
int main()
{
	f2();
	cout << endl;
}